Error correcting codes may be employed by communication and/or data storage systems to detect and correct errors in received or recovered data. Error correcting codes may be implemented by using an encoding process at a transmitter, in which redundancy is added to data, and an iterative decoding process at a receiver, in which the added redundancy is exploited through a series of iterative decoding steps, to correct errors. The effectiveness of an error correcting code may be characterized by the number of errors per encoded data block that the error correcting code is capable of correcting. For example, an error correcting code may be able to correct up to t symbol errors. Error correcting codes are often able to correct a large number of the errors that may be present in a received data, and this may improve end-to-end reliability.
Error correcting codes may be decoded using an iterative message passing process implemented by an iterative decoder. For example, a min-sum or sum-product decoding algorithm may be used to decode an LDPC code. Such algorithms may decode received samples using a process in which each iteration includes two update steps. In the first update step, messages may be passed from check nodes to bit nodes, and message updates may be performed by the bit nodes. In the second update step, the updated messages may be passed from bit nodes back to the check nodes, and message updates may be performed by the check nodes.
The iterative message passing algorithm used by the iterative decoder may occasionally fail to converge or may converge to an incorrect state, leading to bit-errors or sector-errors that generally degrade application performance. Such errors may occur when the iterative message passing algorithm incorrectly converges to an errant vector (sometimes known as a near-codeword error) and/or when the algorithms fails to converge to any stable decoding state. Often, iterative decoding algorithms suffer from an error floor, i.e., a fundamental system limit on the error-rate that cannot be improved simply by increasing the operational signal-to-noise ratio.